//
// Created by LiuYou on 2021/11/14.
//

#include <iostream>
#include <sys/mman.h>
#include <unistd.h>
#include <cstring>
#include <wait.h>


static void* pVoid;


/*
 * mmap();比IPC中的共享内存要好用。可以说是最好用的共享内存(share memory)了。
 * 而且还可以替代 malloc();和free();函数。
 *
 * 使用 mmap();可以创建共享内存(share memory)。父子进程通过这块共享内存进行通信。
 *
 * 先 mmap(); 然后再 fork();
 */
int main(int argc, char** argv) {


    pVoid = mmap( nullptr, 1024, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0 );
    if (pVoid == MAP_FAILED) {
        perror( "mmap()" );
        return 1;
    }
    atexit( [] {
        munmap( pVoid, 1024 );
    } );
    char* str = static_cast<char*>(pVoid);

    pid_t pid = fork();
    if (pid < 0) {
        perror( "fork()" );
        return 1;
    }

    /*
     * 子进程写, 父进程读。
     */
    if (pid == 0) {
        strcpy( str, "Hello" );
        return 0;
    }

    wait( nullptr );
    puts( str );


    return 0;
}
